from multiprocessing import Pool
import time
def task(i):  # 进程任务
    time.sleep(2)
    return i+100
def back(arg):  # 执行成功,回调函数
    print(arg)
if __name__ == "__main__":
    stime = time.time()
    res_list = []  # 进程结果
    pool = Pool(5)  # 创建最多5个进程的进程池
    for i in range(5):
        # 添加异步进程,当达到5个之后,一个进程执行完毕才会添加新的进去
        result = pool.apply_async(func=task, args=(i,), callback=back)
        res_list.append(result)  # 这里不能直接get,否则会直接阻塞直到进程完成
    pool.close()  # 关闭进程池，阻止更多的任务提交到pool,未完成进程会继续执行
    # pool.terminate()  # 立刻结束所有进程,不再执行未完成的进程
    pool.join()  # 等待进程池中所有进程执行完毕
    for res in res_list:  # 获取所有结果
        print(res.get())
    etime = time.time()
    t = etime - stime
    print('the program time is :%s' % t)


